package com.aaa.service;

import com.aaa.dao.BookShopDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.sql.SQLException;

/**
 * @author 荆豪峰
 * @version 1.0
 */
@Service
public class BookShopServiceImpl implements BookShopService{
    @Autowired
    private BookShopDao bookShopDao;
    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ,
    rollbackFor = {SQLException.class, IOException.class},noRollbackFor = {ArithmeticException.class},
    timeout = 10)
    public void purchase(String isbn, String username) {
        //1. 根据图书编号查询图书对应的价格
        int price = bookShopDao.findBookPriceByIsbn(isbn);

        //判断库存是否够
        int stock = bookShopDao.findStockByIsbn(isbn);
        if(stock>0) {
            //2. 修改库存
            bookShopDao.updateBookStock(isbn);
        }else{
            throw new RuntimeException("图书编号为:"+isbn+";库存不足");
        }
        //判断余额是否够
        int balance = bookShopDao.findBalanceByUsername(username);
        if(balance>=price) {
            //3. 修改账户余额
            bookShopDao.updateAccount(username, price);
        }else{
            throw new RuntimeException("账户为:"+username+";余额不足.");
        }
    }
}
